package com.wang.springbootinit.controller;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.wang.springbootinit.common.BaseResponse;
import com.wang.springbootinit.common.ErrorCode;
import com.wang.springbootinit.common.ResultUtils;
import com.wang.springbootinit.model.entity.Honor;
import com.wang.springbootinit.model.entity.User;
import com.wang.springbootinit.model.vo.HonorVO;
import com.wang.springbootinit.service.HonorService;
import com.wang.springbootinit.service.UserService;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.List;

/**
 * 学生荣誉接口
 * 提供学生端使用的荣誉相关功能
 * 包括荣誉申请、查看个人荣誉记录等功能
 * 所有接口都需要学生登录才能访问
 *
 * @author wang
 */
@RestController
@RequestMapping("/honor")
public class HonorController {
    
    @Resource
    private HonorService honorService;
    
    @Resource
    private UserService userService;


    @GetMapping("/list")
    public BaseResponse<List<HonorVO>> listHonors(HttpServletRequest request) {
        List<HonorVO> list = honorService.listHonors(request);
        return ResultUtils.success(list);
    }
    
    /**
     * 申请荣誉
     * 学生提交新的荣誉申请
     * 系统会自动设置申请人ID和初始状态
     *
     * @param honor 荣誉申请信息，包含荣誉名称、级别、颁发单位等
     * @param request HTTP请求对象，用于获取当前登录学生信息
     * @return 新创建的荣誉申请ID
     * @throws BusinessException 当用户未登录或参数无效时抛出异常
     */
    @PostMapping("/apply")
    public BaseResponse<Boolean> applyHonor(@RequestBody Honor honor, HttpServletRequest request) {
        Boolean res = honorService.currentStudentApply(honor,request);
        return ResultUtils.success(res);
    }
    
    /**
     * 获取我的荣誉列表
     * 查询当前登录学生的所有荣誉记录
     * 支持按审核状态筛选
     *
     * @param status 审核状态（可选）：0-待审核，1-已通过，2-已拒绝
     * @param request HTTP请求对象，用于获取当前登录学生信息
     * @return 荣誉列表，按创建时间降序排序
     * @throws BusinessException 当用户未登录时抛出异常
     */
    @GetMapping("/my")
    public BaseResponse<List<Honor>> getMyHonors(
            @RequestParam(required = false) Integer status,
            HttpServletRequest request) {
        // 获取当前登录用户
        User loginUser = userService.getLoginUser(request);
        if (loginUser == null) {
            return ResultUtils.error(ErrorCode.NOT_LOGIN_ERROR);
        }
        
        List<Honor> honors = honorService.getStudentHonors(loginUser.getId(), status);
        return ResultUtils.success(honors);
    }
    
    /**
     * 获取荣誉详情
     * 查看单个荣誉的详细信息
     * 学生只能查看自己的荣誉记录
     *
     * @param id 荣誉ID
     * @param request HTTP请求对象，用于获取当前登录学生信息
     * @return 荣誉详细信息
     * @throws BusinessException 当用户未登录、参数无效或尝试查看他人荣誉时抛出异常
     */
    @GetMapping("/get")
    public BaseResponse<Honor> getHonor(@RequestParam Long id, HttpServletRequest request) {
        if (id == null || id <= 0) {
            return ResultUtils.error(ErrorCode.PARAMS_ERROR);
        }
        
        // 获取当前登录用户
        User loginUser = userService.getLoginUser(request);
        if (loginUser == null) {
            return ResultUtils.error(ErrorCode.NOT_LOGIN_ERROR);
        }
        
        Honor honor = honorService.getHonorById(id);
        
        // 只能查看自己的荣誉
        if (honor != null && !honor.getStudentId().equals(loginUser.getId())) {
            return ResultUtils.error(ErrorCode.NO_AUTH_ERROR);
        }
        
        return ResultUtils.success(honor);
    }
    
    /**
     * 获取我的荣誉统计
     * 统计当前登录学生的荣誉获得情况
     * 包括各级别荣誉的数量分布
     *
     * @param request HTTP请求对象，用于获取当前登录学生信息
     * @return 统计结果，包含各级别荣誉的数量
     * @throws BusinessException 当用户未登录时抛出异常
     */
    @GetMapping("/my/statistics")
    public BaseResponse<List<Honor>> getMyHonorStatistics(HttpServletRequest request) {
        // 获取当前登录用户
        User loginUser = userService.getLoginUser(request);
        if (loginUser == null) {
            return ResultUtils.error(ErrorCode.NOT_LOGIN_ERROR);
        }
        
        List<Honor> statistics = honorService.getHonorStatistics(loginUser.getId());
        return ResultUtils.success(statistics);
    }
} 